Aquest dataset prové de la pràctica anterior, en la qual, no vaig prestar gens d’atenció a la neteja de les dades, donant com a resultat un dataset molt brut. Això es va fer a proposit per tal de poder aprofitar aquest dataset en aquesta pràctica.
Aquest dataset conté informació sobre ofertes laborals trobades a la web proporcionada per l’estat Espanyol per a tal proposit.
La pregunta que volem respondre amb aquest dataset serà:
A la pràctica anterior enumerabem també les següents idees:
Però aquestes les deixarem per futurs treballs.
Per aquest apartat ja es va crear un script python que s’encarregaba d’ajuntar les dades obtingudes en diferents dies. La idea darrera d’aquest script era la de recolectar totes les dades disponibles a la web en una primera pasada, i desprès anar actualitzant el dataset agafant dades diaries i agrupant-les sota el mateix fitxer .csv
Per tant, en aquest apartat considero que no haig de fer més que el ja fet fins a la data.
El script es pot trobar en la següent URL: [https://github.com/amilan/spanish_job_market/blob/master/src/dataset_merge.py]
També tinc en compte, que la web oficial de la qual es va extreure les dades, ja recopila aquestes dades de diferent fonts, així doncs, no considero que sigui necessari l’integració de dades de diferentes fonts, ja que aquesta ha estat realitzada anteriorment.
Hauria d’explicar una mica com faria aquesta integració en cas de que no hagués estat feta per la propia font utilitzada? Revisar si s’ha d’expandir més aquesta explicació sobre la integració i selecció de dades d’interès
En aquest apartat seleccionarem les dades necessaries per als nostres estudis. Hem de tenir en compte, que a la pràctica anterior hem vaig limitar a agafar totes les dades possibles i a possar-les en un fitxer .csv. Aquestes dades provenien d’una base de dades NoSQL, ja que vaig detectar que amb les mateixes crides, podiem obtenir dades amb diferents esquemes (schemaless). Així doncs, farem una selecció de les dades que utilitzarem i eliminarem així dades no necessàries o repetides.
Començem carregant les dades:
offers <- read.csv("./data/offers_dataset.csv")
head(offers)
length(offers$categoria)
[1] 40534
Com podem veure, tenim 40534 registres i 94 característiques, moltes de les quals no ens seràn d’utilitat.
names(offers)
[1] "categoria" "categoriaF" "categoriaS" "ciudad" "ciudadF" "companiaSeleccion" "competenciasReq" "comunidad" "comunidadF"
[10] "consulta1" "consulta2" "consulta3" "consulta4" "contenido" "creador" "cuestionario" "discapacidad" "duracion"
[19] "educacion" "educacionDes" "educacionDesF" "educacionF" "educacionReq" "educacionReqF" "educacionS" "email" "empresaSocial"
[28] "ett" "fechaCreacion" "fechaCreacionBoost" "fechaCreacionPortal" "fechaIncorporacion" "fechaRevision" "formacionReq" "horario" "id"
[37] "jornada" "jornadaF" "localizacion" "minExperiencia" "nivel" "noMeInteresa" "numCandidatos" "oReq" "oferta"
[46] "origen" "pais" "paisF" "paisS" "provincia" "provinciaF" "provinciaLimitrofe" "provinciaS" "publicado1"
[55] "publicado2" "publicado3" "publicado4" "respuesta1A" "respuesta1B" "respuesta2A" "respuesta2B" "respuesta2C" "respuesta3A"
[64] "respuesta3B" "salarioMax" "salarioMin" "score" "sector" "sectorF" "sisgarjuv" "speState" "speStateId"
[73] "subcategoria" "subcategoriaF" "subcategoriaS" "subsector" "subsectorF" "tamanoCompania2" "telefono" "tipoContrato" "tipoContratoN"
[82] "titulo" "trabajosOfertados" "url" "valor1A" "valor1B" "valor2A" "valor2B" "valor3B" "verMail"
[91] "verSalarioMax" "verSalarioMin" "verTelefono" "web"
Així doncs, començarem seleccionant les dades d’interés. Recordem que la meva intenció es la de fer un estudi sobre els tipus d’ofertes de treballs a Espanya i en concret a cadascuna de les regions.
Primerament, comprovarem que només tenim dades d’ofertes realitzades a Espanya.
levels(offers$paisS)
[1] "CONGO" "ESPAÑA" "ESPAÑA" "ESPA��A"
Comprovem dues coses, que tenim ofertes d’Espanya i també al Congo, i que tenim un problema de codificació de caracters, ja que ens troba el país d’Espanya en tres factors diferents. Com que només volem utilitzar les dades de les ofertes a Espanya, podem seleccionar totes les que no siguin al Congo i desprès eliminar aquesta columna.
Podem corregir les dades erronees de país:
offers$paisS <- sub("ESPAÑA", "ESPAÑA", offers$paisS)
offers$paisS <- sub("ESPA��A", "ESPAÑA", offers$paisS)
levels(factor(offers$paisS))
[1] "CONGO" "ESPAÑA"
També podriem haver canviat la codificació dels caracters, com veurem més endavant.
Seleccionem ara només les ofertes a Espanya.
#offers_sp <- subset(offers, !(paisS %in% c("CONGO"))
#offers_sp <- subset(offers, !(paisS == "CONGO"))
offers <- subset(offers, paisS == "ESPAÑA")
levels(factor(offers$paisS))
[1] "ESPAÑA"
# paisS es ara del tipus chr, hauriem de convertirla de nou a factor
offers$paisS <- factor(offers$paisS)
class(offers$paisS)
[1] "factor"
Seguidament, eliminarem les colummnes que ofereixen informació duplicada. Ens quedarem amb les característiques:
selected_features <- c("categoriaF", "ciudadF", "comunidadF", "educacionF", "fechaCreacion", "jornadaF", "provinciaS", "salarioMax", "salarioMin", "subcategoriaS")
offers <- offers[selected_features]
head(offers)
Com que ens hem adonat abans que hi teniem problemes de codificació amb els strings, lo primer que farem serà corregir aquests problemes.
levels(offers$comunidadF)
[1] "" "ANDALUCÃ�A" "ANDALUCÍA" "ARAGÓN" "ARAGÓN" "CANTABRIA" "CASTILLA LA MANCHA" "CASTILLA Y LEÓN"
[9] "CASTILLA Y LEÓN" "CASTILLA Y LE��N" "CATALUÑA" "CATALUÑA" "CATALU��A" "CEUTA" "COMUNIDAD VALENCIANA" "EXTREMADURA"
[17] "GALICIA" "ILLES BALEARS" "ISLAS CANARIAS" "LA RIOJA" "MADRID" "MELILLA" "NAVARRA" "PA�S VASCO"
[25] "PAÍS VASCO" "PRINCIPADO DE ASTURIAS" "REGIÓN DE MURCIA" "REGIÓN DE MURCIA" "REGI��N DE MURCIA" "Sin especificar"
offers$comunidadF <- sub("ARAGÓN", "ARAGÓN", offers$comunidadF)
offers$comunidadF <- sub("CASTILLA Y LE��N", "CASTILLA Y LEÓN", offers$comunidadF)
offers$comunidadF <- sub("CASTILLA Y LEÓN", "CASTILLA Y LEÓN", offers$comunidadF)
offers$comunidadF <- sub("CATALU��A", "CATALUÑA", offers$comunidadF)
offers$comunidadF <- sub("CATALUÑA", "CATALUÑA", offers$comunidadF)
offers$comunidadF <- sub("ANDALUCÃ�A", "ANDALUCÍA", offers$comunidadF)
offers$comunidadF <- sub("REGI��N DE MURCIA", "REGIÓN DE MURCIA", offers$comunidadF)
offers$comunidadF <- sub("REGIÓN DE MURCIA", "REGIÓN DE MURCIA", offers$comunidadF)
offers$comunidadF <- sub("PAÃ�S VASCO", "PAÍS VASCO", offers$comunidadF)
offers$comunidadF <- sub("Sin especificar", "", offers$comunidadF)
offers$comunidadF <- factor(offers$comunidadF)
levels(offers$comunidadF)
[1] "" "ANDALUCÍA" "ARAGÓN" "CANTABRIA" "CASTILLA LA MANCHA" "CASTILLA Y LEÓN" "CATALUÑA" "CEUTA"
[9] "COMUNIDAD VALENCIANA" "EXTREMADURA" "GALICIA" "ILLES BALEARS" "ISLAS CANARIAS" "LA RIOJA" "MADRID" "MELILLA"
[17] "NAVARRA" "PAÍS VASCO" "PRINCIPADO DE ASTURIAS" "REGIÓN DE MURCIA"
Veiem que en aquest cas podem tenir valor buit (“”) o sin especificar. Ens interessa deixar-ho com valor buit, ja que sabem que la oferta ha d’estar ubicada en alguna comunitat, però no sabem en quina.
levels(offers$categoriaF)
[1] "" "ADMINISTRACIÓN" "ADMINISTRACIÓN" "AGRICULTURA/JARDINERÍA/ALIMENTACIÓN" "ALMACENES/REPONEDORES"
[6] "APRENDICES/PRIMER EMPLEO" "ARQUITECTURA/DISEÑO" "COMERCIAL/VENTAS" "COMUNICACIÓN/CULTURA/ENTRETENIMIENTO" "CONDUCTORES/TRANSPORTE"
[11] "CONSTRUCCIÓN" "CONSTRUCCI��N" "CUIDADOS/ASISTENCIA EN EL HOGAR" "DEPENDIENTES/INFORMACIÓN" "DERECHO/PSICOLOGÍA/CIENCIAS SOCIALES"
[16] "DIRECTIVOS" "EDUCACIÓN/SERVICIOS SOCIALES" "EDUCACIÓN/SERVICIOS SOCIALES" "EDUCACI��N/SERVICIOS SOCIALES" "ELECTRICIDAD/ELECTRÓNICA/ENERGÍA"
[21] "ELECTRICIDAD/ELECTR��NICA/ENERG��A" "FÁBRICAS/INDUSTRIA" "FÃ�BRICAS/INDUSTRIA" "HOSTELERÍA/TURISMO" "HOSTELER��A/TURISMO"
[26] "INFORMÁTICA/TELECOMUNICACIONES" "INFORMÃ�TICA/TELECOMUNICACIONES" "INFORM��TICA/TELECOMUNICACIONES" "INGENIERÃ�A/CALIDAD/CIENCIAS" "INGENIERÍA/CALIDAD/CIENCIAS"
[31] "METAL/MECÁNICA" "METAL/MECÃ�NICA" "PELUQUERÍA/ESTÉTICA" "SALUD/DEPORTE" "VIGILANCIA/SERVICIOS"
En comptes de corregir un a un, transformarem les dades al format latin1.
# convertim les dades a encoding latin1
offers$categoriaF <- factor(iconv(offers$categoriaF, to = "latin1"))
levels(offers$categoriaF)
[1] "" "ADMINISTRACIÓN" "AGRICULTURA/JARDINERÍA/ALIMENTACIÓN" "ALMACENES/REPONEDORES" "APRENDICES/PRIMER EMPLEO"
[6] "ARQUITECTURA/DISEÑO" "COMERCIAL/VENTAS" "COMUNICACIÓN/CULTURA/ENTRETENIMIENTO" "CONDUCTORES/TRANSPORTE" "CONSTRUCCIÓN"
[11] "CUIDADOS/ASISTENCIA EN EL HOGAR" "DEPENDIENTES/INFORMACIÓN" "DERECHO/PSICOLOGÍA/CIENCIAS SOCIALES" "DIRECTIVOS" "EDUCACIÓN/SERVICIOS SOCIALES"
[16] "ELECTRICIDAD/ELECTRÓNICA/ENERGÍA" "FÁBRICAS/INDUSTRIA" "HOSTELERÍA/TURISMO" "INFORMÁTICA/TELECOMUNICACIONES" "INGENIERÍA/CALIDAD/CIENCIAS"
[21] "METAL/MECÁNICA" "PELUQUERÍA/ESTÉTICA" "SALUD/DEPORTE" "VIGILANCIA/SERVICIOS"
TODO: Revisar provincias!!! Guipuzcua esta repetida!!!!
levels(offers$provinciaS)
[1] "" "ÁLAVA" "ALBACETE" "ALICANTE" "ALMERÍA" "ASTURIAS" "ÁVILA" "BADAJOZ"
[9] "BALEARS (ILLES)" "BARCELONA" "BURGOS" "CÁCERES" "CÁDIZ" "CANTABRIA" "CASTELLÓN" "CEUTA"
[17] "CIUDAD REAL" "CÓRDOBA" "CORUÑA (A)" "CUENCA" "GIRONA" "GRANADA" "GUADALAJARA" "GUIPÚZCOA"
[25] "GUIPÚZCOA" "HUELVA" "HUESCA" "JAÉN" "LEÓN" "LLEIDA" "LUGO" "MADRID"
[33] "MÁLAGA" "MELILLA" "MURCIA" "NAVARRA" "OURENSE" "PALENCIA" "PALMAS (LAS)" "PONTEVEDRA"
[41] "RIOJA (LA)" "SALAMANCA" "SANTA CRUZ DE TENERIFE" "SEGOVIA" "SEVILLA" "SORIA" "TARRAGONA" "TERUEL"
[49] "TOLEDO" "VALENCIA" "VALLADOLID" "VIZCAYA" "ZAMORA" "ZARAGOZA"
Podem veure que Guipúzcua està repetida degut a la mala codificació.
# convertim les dades a encoding latin1
offers$provinciaS <- factor(iconv(offers$provinciaS, to = "latin1"))
levels(offers$provinciaS)
[1] "" "ÁLAVA" "ALBACETE" "ALICANTE" "ALMERÍA" "ASTURIAS" "ÁVILA" "BADAJOZ"
[9] "BALEARS (ILLES)" "BARCELONA" "BURGOS" "CÁCERES" "CÁDIZ" "CANTABRIA" "CASTELLÓN" "CEUTA"
[17] "CIUDAD REAL" "CÓRDOBA" "CORUÑA (A)" "CUENCA" "GIRONA" "GRANADA" "GUADALAJARA" "GUIPÚZCOA"
[25] "HUELVA" "HUESCA" "JAÉN" "LEÓN" "LLEIDA" "LUGO" "MADRID" "MÁLAGA"
[33] "MELILLA" "MURCIA" "NAVARRA" "OURENSE" "PALENCIA" "PALMAS (LAS)" "PONTEVEDRA" "RIOJA (LA)"
[41] "SALAMANCA" "SANTA CRUZ DE TENERIFE" "SEGOVIA" "SEVILLA" "SORIA" "TARRAGONA" "TERUEL" "TOLEDO"
[49] "VALENCIA" "VALLADOLID" "VIZCAYA" "ZAMORA" "ZARAGOZA"
levels(offers$jornadaF)
[1] "" "COMPLETA" "INDIFERENTE" "PARCIAL"
# convertim les dades a encoding latin1
offers$subcategoriaS <- factor(iconv(offers$subcategoriaS, to = "latin1"))
levels(offers$subcategoriaS)
[1] "" "ABOGADOS" "ACUICULTURA" "ADMINISTRATIVOS"
[5] "AGENCIA DE VIAJES" "AGENTES COMERCIALES/REPRESENTANTES" "AGRICULTURA/GANADERÍA" "ALBAÑILERIA/ACABADOS"
[9] "ANALISTAS/PROGRAMADORES" "ANIMACIÓN TURÍSTICA" "ANIMACIÓN/TIEMPO LIBRE" "APRENDICES"
[13] "APUESTAS Y JUEGO" "AREA DIRECTIVA" "ARQUITECTOS" "ARTE/CULTURA/ESPECTÁCULOS"
[17] "ARTESANÍA/OFICIOS" "ASISTENCIA E INTEGRACIÓN SOCIAL" "AUXILIARES DE ENFERMERÍA/GERIATRÍA" "AUXILIARES DE SERVICIO/PERSONAL SUBALTER"
[21] "AYUDA DOMICILIARIA" "AYUDANTES DE COCINA/COMIDA RÁPIDA" "BANCA/SEGUROS" "BIBLIOTECAS/ARCHIVOS/MUSEOS"
[25] "BUCEADORES" "CAJEROS SUPERMERCADO" "CAJEROS Y TAQUILLEROS" "CALIDAD"
[29] "CAMAREROS" "CARNICERÍA/CHARCUTERIA" "CARPINTERÍA" "CERRAJEROS/FORJA/HERREROS"
[33] "COCINEROS" "COMERCIO EXTERIOR" "COMPRAS/DISTRIBRUCIÓN" "COMUNICACIÓN/PUBLICIDAD/MARKETING"
[37] "CONSERVAS/ALIMENTOS/BEBIDAS" "CONTABILIDAD/FINANZAS" "CRISTALEROS" "CUIDADO DE ANCIANOS/NIÑOS"
[41] "CUIDADORES Y ADIESTRADORES DE ANIMALES" "DECORADORES" "DELINEANTES/PROYECTISTAS" "DEPENDIENTES"
[45] "DIETÉTICA Y NUTRICIÓN" "DISEÑO GRÁFICO/WEB" "DISEÑO INDUSTRIAL" "ECONOMISTAS"
[49] "EDICIÓN/INDUSTRIA GRÁFICA" "EDUCACIÓN ESPECIAL/PEDAGOGÍA" "EDUCACIÓN INFANTIL" "ELECTRICIDAD"
[53] "ELECTRÓNICA" "ENCARGADOS DE OBRAS/CAPATACES" "ENCARGADOS Y SUPERVISORES DE PRODUCCIÓN" "ENCOFRADO/FERRALLA/ESTRUCTURAS"
[57] "ENCUESTADORES" "ENERGÍAS RENOVABLES" "ENFERMERÍA" "ENSEÑANZA DE IDIOMAS"
[61] "ENSEÑANZA PRIMARIA Y SECUNDARIA" "ERP/CRM/BUSSINESS INTELLIGENCE" "ESTÉTICA" "FARMACIA/ÓPTICA/AUDICIÓN"
[65] "FISIOTERAPIA/DEPORTE/MANTENIMIENTO FISIC" "FONTANERÍA" "FORESTAL/JARDINERÍA" "FORMACIÓN PROFESIONAL"
[69] "FRÍO Y CLIMATIZACIÓN" "FUNDICIÓN/SIDERURGÍA" "GESTIÓN DE ALMACENES" "GESTIÓN DE PROYECTOS"
[73] "GRÚAS/EXCAVADORAS/MAQUINARIA" "I+D" "IMAGEN Y SONIDO/AUDIOVISUAL" "INFORMACIÓN/AZAFATAS/PROMOCIÓN COMERCIAL"
[77] "INGENIERÍAS" "LIMPIEZA" "MADERA Y MUEBLE/EBANISTERÍA" "MAQUINA HERRAMIENTA/TORNO/FRESA"
[81] "MECÁNICA DEL AUTOMÓVIL" "MECÁNICA/MANTENIMIENTO" "MEDICINA" "MEDIO AMBIENTE/QUÍMICA/BIOLOGÍA/LABORATO"
[85] "MENSAJERÍA" "MICROINFORMATICA/ASISTENCIA TÉCNICA" "MINAS/CANTERAS/PERFORACIONES" "MONTADORES Y ENSAMBLADORES"
[89] "MOZOS DE ALMACÉN/CARRETILLEROS" "NAVEGACIÓN" "ORDENANZAS/CONSERJES" "OTRAS ACTIVIDADES"
[93] "OTRAS ACTIVIDADES TÉCNICAS" "OTROS PROFESIONALES" "PANADERÍA/REPOSTERÍA" "PELUQUERÍA"
[97] "PEONES" "PEONES/OPERARIOS/MANIPULADORES" "PERIODISMO E INFORMACIÓN" "PESCA"
[101] "PINTURA" "POMPAS FUNEBRES" "PREVENCIÓN RIESGOS LABORALES" "PRIMER EMPLEO"
[105] "PRODUCCIÓN Y DISTRIBUCCIÓN DE ENERGIA" "PROFESORES DE ENSEÑANZA SUPERIOR" "PSICÓLOGOS" "RECEPCIONISTAS"
[109] "RECEPCIONISTAS DE HOTEL" "RECURSOS HUMANOS/PERSONAL" "REPARTO DE MERCANCÍAS" "REPONEDORES"
[113] "SALUD DENTAL" "SECRETARIADO" "SEGURIDAD" "SERVICIO DOMÉSTICO"
[117] "SERVICIOS VETERINARIOS" "SISTEMAS/SEGURIDAD/REDES" "SOCIÓLOGOS" "SOLDADURA/CALDERERÍA/CHAPA"
[121] "TECNICOS EN CONSTRUCCION" "TECNICOS METALURGICOS" "TELECOMUNICACIONES" "TELEOPERADORES"
[125] "TEXTIL/CONFECCIÓN/CALZADO" "TOPOGRAFÍA" "TRANSPORTE AÉREO" "TRANSPORTE DE PERSONAS O MERCANCIAS"
[129] "TRANSPORTE INTERNACIONAL/ESPECIAL" "VENDEDORES" "VIGILANCIA/GUARDAS JURADOS"
# convertim les dades a encoding latin1
offers$educacionF <- factor(iconv(offers$educacionF, to = "latin1"))
levels(offers$educacionF)
[1] "" "Bachillerato" "Certificados de Profesionalidad" "Diplomado o Ingeniero Técnico" "Diplomado o Ingeniero Técnico" "Doctor Universitario"
[7] "ESO, EGB, Graduado Escolar" "Estudios primarios" "FP I, Ciclo de Grado Medio" "FP II, Ciclo de Grado Superior" "Licenciado o Ingeniero Superior" "Otras Formaciones"
[13] "Postgrado Universitario" "Sin especificar" "Sin estudios"
Tot i la conversió, encara tenim algun cas que no s’ha codificat correctament. El corregirem manualment.
offers$educacionF <- sub("Diplomado o Ingeniero Técnico", "Diplomado o Ingeniero Técnico", offers$educacionF)
offers$educacionF <- sub("Sin especificar", "", offers$educacionF)
offers$educacionF <- factor(offers$educacionF)
levels(offers$educacionF)
[1] "" "Bachillerato" "Certificados de Profesionalidad" "Diplomado o Ingeniero Técnico" "Doctor Universitario" "ESO, EGB, Graduado Escolar"
[7] "Estudios primarios" "FP I, Ciclo de Grado Medio" "FP II, Ciclo de Grado Superior" "Licenciado o Ingeniero Superior" "Otras Formaciones" "Postgrado Universitario"
[13] "Sin estudios"
# convertim les dades a encoding latin1
offers$ciudadF <- factor(iconv(offers$ciudadF, to = "latin1"))
length(levels(offers$ciudadF))
[1] 1905
He detectat que encara hi ha algun cas en el que no s’ha corregit bé, com per exemple Gijón, que apareix dues vegades en diferent format, però en aquest estudi no anirem al detall de ciutat, així que de moment no corregiré aquest problema.
Com hem vist anteriorment, tenim dades amb element buits en les característiques del tipus factor. Hem convertit també les dades amb valors sin especificar en valor buit, ja que aquest, per exemple, representa millor que la oferta està situada a una localització, però no sabem a on.
Passem ara a mirar si tenim elements nulls (NA).
sapply(offers, function(x)(sum(is.na(x))))
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin subcategoriaS
23 0 0 0 0 0 1 38087 31667 8
length(offers$salarioMax)
[1] 40533
Passem ara a netejar les característiques numériques. Veiem que aproximadament una quarta part de les dades dispossen de valors de salari mínim i máxim. Aquests ens podrien ser suficient per al nostres estudi, sempre i quan tinguem suficient casos d’estudi per a les diferentes regions.
Llavors, ens quedarem amb les dades que tenen un salari mínim i descartarem la resta.
offers_sp <- subset(offers, !is.na(offers$salarioMin))
sapply(offers_sp, function(x)(sum(is.na(x))))
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin subcategoriaS
4 0 0 0 0 0 0 6420 0 2
Com que hi ha menys dades amb salari máxim, podriem seguir alguna de les següents estratègies: - Descartar les dades sense salari maxim. Això reduiría molt el nombre de dades, però encara tindriem prou per al estudi que volem realitzar. - Imputar dades utilitzant KNN. Amb aquesta estratègia podriem obtenir els valors en funció de les dades veines. - Imputar els valors en funció de la mitjana poblacional de la mostra.
En aquesta ocasió utilitzarem l’algoritme KNN.
offers_sp$salarioMax <- kNN(offers_sp)$salarioMax
sapply(offers_sp, function(x)(sum(is.na(x))))
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin subcategoriaS
4 0 0 0 0 0 0 0 0 2
NOTE: the following chunk seems to be a mistake in executing the previous code several times. Veiem que tenim moltes ciutats amb NA. Seguirem la mateixa estrategia que abans i com que sabem que la oferta ha d’estar ubicada en alguna ciutat (encara que sigui oferta online), substituirem els NA per valors buits “”.
offers_sp$ciudadF[is.na(offers_sp$ciudadF)] <- ""
sapply(offers_sp, function(x)(sum(is.na(x))))
Ara ens queden per tractar 4 casos de categoriaF i 2 de subcategoriaS.
kable(subset(offers_sp, is.na(offers_sp$categoriaF)))
| categoriaF | ciudadF | comunidadF | educacionF | fechaCreacion | jornadaF | provinciaS | salarioMax | salarioMin | subcategoriaS | |
|---|---|---|---|---|---|---|---|---|---|---|
| 32704 | NA | Las Palmas de Gran Canaria | ISLAS CANARIAS | Otras Formaciones | 2018-06-05T16:50:28Z | PARCIAL | PALMAS (LAS) | 1000 | 600 | NA |
| 32705 | NA | Bilbao | PAÍS VASCO | Licenciado o Ingeniero Superior | 2018-03-02T08:33:14Z | COMPLETA | VIZCAYA | 25000 | 20000 | NA |
| 32706 | NA | Bilbao | PAÍS VASCO | FP II, Ciclo de Grado Superior | 2018-03-02T08:27:33Z | COMPLETA | VIZCAYA | 25000 | 20000 | SISTEMAS/SEGURIDAD/REDES |
| 32707 | NA | Bilbao | PAÍS VASCO | FP II, Ciclo de Grado Superior | 2018-03-02T08:15:32Z | COMPLETA | VIZCAYA | 25000 | 20000 | ANALISTAS/PROGRAMADORES |
Mirant la subcategoria, veiem clarament que les dues últimes pertanyen a la categoria: INFORMÁTICA/TELECOMUNICACIONES, però malauradament, les dues primeres no tenen subcategoria. Així doncs, descartarem les dues primeres i ens quedarem amb les dues últimes, introduint el nou valor a la categoria.
offers_sp <- subset(offers_sp, !is.na(offers_sp$subcategoriaS))
sapply(offers_sp, function(x)(sum(is.na(x))))
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin subcategoriaS
2 0 0 0 0 0 0 0 0 0
Com que nomès ens queden dos valors NA per substituir i son els que coneixem, podem fer la següent operació.
offers_sp[is.na(offers_sp)] <- c("INFORMÁTICA/TELECOMUNICACIONES")
Comprovem que ja no tenim cap valor NA.
sapply(offers_sp, function(x)(sum(is.na(x))))
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin subcategoriaS
0 0 0 0 0 0 0 0 0 0
Seguidament podriem comprovar si les nostres dades tenen el tipus que desitjem.
sapply(offers_sp, function(x)(class(x)))
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin subcategoriaS
"factor" "factor" "factor" "factor" "factor" "factor" "factor" "numeric" "numeric" "factor"
Veiem que haurem de tractar el format de la característica fechaCreacion. En aquest moment, tenim la data com a un string amb el format: anys, mes, dia, hora. En el nostre cas, nomès amb l’any, mes i dia en tindrem prou. A més, haurem de donar-li el tipus de date type.
offers_sp$fechaCreacion <- as.Date(gsub("T\\d*:\\d*:\\d*Z", "", offers_sp$fechaCreacion))
sapply(offers_sp, function(x)(class(x)))
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin subcategoriaS
"factor" "factor" "factor" "factor" "Date" "factor" "factor" "numeric" "numeric" "factor"
summary(offers_sp)
categoriaF ciudadF comunidadF educacionF fechaCreacion jornadaF provinciaS salarioMax salarioMin
INFORMÁTICA/TELECOMUNICACIONES:1322 :1457 CATALUÑA :3432 :4483 Min. :2016-04-08 :1987 BARCELONA:2527 Min. : 0 Min. : 0
COMERCIAL/VENTAS : 980 Barcelona:1037 MADRID :1593 FP II, Ciclo de Grado Superior:1508 1st Qu.:2018-05-30 COMPLETA :5402 MADRID :1577 1st Qu.: 1200 1st Qu.: 1000
ADMINISTRACIÓN : 724 Madrid : 968 ANDALUCÍA :1205 ESO, EGB, Graduado Escolar : 572 Median :2018-09-04 INDIFERENTE: 185 GIRONA : 411 Median : 1600 Median : 1700
SALUD/DEPORTE : 639 Girona : 188 COMUNIDAD VALENCIANA: 511 FP I, Ciclo de Grado Medio : 545 Mean :2018-07-03 PARCIAL :1290 VALENCIA : 284 Mean : 11618 Mean : 10091
HOSTELERÍA/TURISMO : 579 Valencia : 121 CASTILLA Y LEÓN : 327 Diplomado o Ingeniero Técnico : 543 3rd Qu.:2018-10-11 TARRAGONA: 283 3rd Qu.: 18000 3rd Qu.: 18000
CONSTRUCCIÓN : 515 Sevilla : 104 GALICIA : 297 Estudios primarios : 317 Max. :2018-11-04 SEVILLA : 262 Max. :9999999 Max. :105000
(Other) :4105 (Other) :4989 (Other) :1499 (Other) : 896 (Other) :3520
subcategoriaS
AGENTES COMERCIALES/REPRESENTANTES: 781
: 554
ANALISTAS/PROGRAMADORES : 417
ENFERMERÍA : 360
ADMINISTRATIVOS : 327
PEONES/OPERARIOS/MANIPULADORES : 257
(Other) :6168
Per últim, podem canviar el nombre de les característiques per que tinguin una mica més de sentit i guardem les dades en un nou fitxer csv.
names(offers_sp)
[1] "categoriaF" "ciudadF" "comunidadF" "educacionF" "fechaCreacion" "jornadaF" "provinciaS" "salarioMax" "salarioMin" "subcategoriaS"
final_names <- c("Categoria", "Ciudad", "Comunidad", "Educacion", "FechaCreacion", "TipoJornada", "Provincia", "SalarioMax", "SalarioMin", "SubCategoria")
names(offers_sp) <- final_names
head(offers_sp)
Després de fer aquesta neteja, encara podriem comprobar si les nostres dades son consistents. Per fer aixó podriem mirar si tenim ofertes en les que el salari mínim sigui mallor que el salari màxim, i de ser així, eliminar-les del nostre dataset.
length(subset(offers_sp, SalarioMax < SalarioMin)$SalarioMax)
[1] 2035
Veiem que efectivament, tenim 2035 ofertes amb dades inconsistents. Procedirem doncs a eliminar-les.
offers_sp <- subset(offers_sp, SalarioMax >= SalarioMin)
En aquest punt, ens adonem que hi ha un tipus de registres en els quals tenim 0 a salari minim i máxim, lo que vol dir que aquestes ofertes no han introduit un valor real en quant als salaris, o bé son ofertes de pràctiques no remunerades. Ninguna d’aquestes opcions les volem contemplar en el nostre estudi, així que com tenim dades suficients, podem prescindir d’aquestes.
offers_sp <- subset(offers_sp, !(SalarioMin == 0 & SalarioMax == 0))
Finalment, podriem exportar el nostre conjunt de dades netejat.
write.csv(offers_sp, "./data/spanish_job_offers_clean.csv")
Donem ara un cop d’ull a les dades per tal d’identificar valors extrems.
boxplot(offers_sp$SalarioMin)
boxplot(offers_sp$SalarioMax)
boxplot(offers_sp$SalarioMin ~ offers_sp$Comunidad)
boxplot(offers_sp$SalarioMax ~ offers_sp$Comunidad)
TODO: Comprovar si realment hauriem de filtrar per categories
boxplot(subset(offers_sp, Categoria == "INFORMÁTICA/TELECOMUNICACIONES"))
boxplot.stats(offers_sp$SalarioMin)$out
[1] 46200 40000 40000 40000 45000 42000 45000 50000 50000 40000 40000 39000 39000 39000 40000 45000
[17] 42000 39000 42000 39000 39000 39000 39000 40000 39000 39000 39000 46200
boxplot.stats(offers_sp$SalarioMax)$out
[1] 85800 65000 65000 50000 50000 60000 45000 50000 50000 50000 50000 340000
[13] 50000 50000 65000 50000 50000 9999999 200000 45000 9999999 50000 60000 50000
[25] 50000 60000 50000 220000 100000 85800
Veiem que tenim valors extrems tant en els salaris màxims com en els mínims. En el cas dels salaris mínims, son valor raonables, i crec que els hauriem de deixar tal qual son. En canvi, trobem dos valors extrems molt curiosos, que semblen ser alguna mena de valor prefixat per a no donar un límit superior. En aquest cas, ja que son només dos valors i tenim suficient dades per al nostre estudi, considero que lo millor sería treure les dades corresponents. Així doncs, ho farem de la següent manera.
kable(subset(offers_sp, SalarioMax == 9999999))
| Categoria | Ciudad | Comunidad | Educacion | FechaCreacion | TipoJornada | Provincia | SalarioMax | SalarioMin | SubCategoria | |
|---|---|---|---|---|---|---|---|---|---|---|
| 17853 | COMERCIAL/VENTAS | Madrid | MADRID | 2018-09-11 | INDIFERENTE | MADRID | 9999999 | 0 | AGENTES COMERCIALES/REPRESENTANTES | |
| 18691 | COMERCIAL/VENTAS | Sevilla | ANDALUCÍA | 2018-09-11 | INDIFERENTE | SEVILLA | 9999999 | 0 | AGENTES COMERCIALES/REPRESENTANTES |
kable(subset(offers_sp, SalarioMin == 0))
| Categoria | Ciudad | Comunidad | Educacion | FechaCreacion | TipoJornada | Provincia | SalarioMax | SalarioMin | SubCategoria | |
|---|---|---|---|---|---|---|---|---|---|---|
| 103 | CONSTRUCCIÓN | San Sebastián de los Reyes | MADRID | Otras Formaciones | 2018-10-22 | COMPLETA | MADRID | 1000 | 0 | ALBAÑILERIA/ACABADOS |
| 1036 | INFORMÁTICA/TELECOMUNICACIONES | Pamplona/Iruña | NAVARRA | FP II, Ciclo de Grado Superior | 2018-10-29 | COMPLETA | NAVARRA | 0 | 0 | ERP/CRM/BUSSINESS INTELLIGENCE |
| 1044 | CONSTRUCCIÓN | La Pobla de Vallbona | COMUNIDAD VALENCIANA | 2018-10-29 | COMPLETA | VALENCIA | 0 | 0 | PINTURA | |
| 3148 | CONSTRUCCIÓN | Tarancón | CASTILLA LA MANCHA | Sin estudios | 2018-10-26 | COMPLETA | CUENCA | 1500 | 0 | FONTANERÍA |
| 4721 | SALUD/DEPORTE | Benalmádena | ANDALUCÍA | Doctor Universitario | 2018-10-26 | INDIFERENTE | MÁLAGA | 0 | 0 | SALUD DENTAL |
| 4722 | SALUD/DEPORTE | Benalmádena | ANDALUCÍA | Diplomado o Ingeniero Técnico | 2018-10-26 | PARCIAL | MÁLAGA | 0 | 0 | FISIOTERAPIA/DEPORTE/MANTENIMIENTO FISIC |
| 4971 | HOSTELERÍA/TURISMO | Vila de Cruces | GALICIA | 2018-10-25 | PARCIAL | PONTEVEDRA | 0 | 0 | CAMAREROS | |
| 5312 | COMERCIAL/VENTAS | Madrid | MADRID | 2018-10-24 | COMPLETA | MADRID | 0 | 0 | AGENTES COMERCIALES/REPRESENTANTES | |
| 5990 | CONSTRUCCIÓN | Santander | CANTABRIA | 2018-10-24 | COMPLETA | CANTABRIA | 0 | 0 | ALBAÑILERIA/ACABADOS | |
| 6718 | CONSTRUCCIÓN | Boadilla del Monte | MADRID | 2018-10-24 | COMPLETA | MADRID | 0 | 0 | ENCARGADOS DE OBRAS/CAPATACES | |
| 7043 | AGRICULTURA/JARDINERÍA/ALIMENTACIÓN | Sant Joan d’Alacant | COMUNIDAD VALENCIANA | ESO, EGB, Graduado Escolar | 2018-10-23 | PARCIAL | ALICANTE | 1200 | 0 | FORESTAL/JARDINERÍA |
| 7637 | CONSTRUCCIÓN | Madrid | MADRID | Bachillerato | 2018-05-21 | COMPLETA | MADRID | 0 | 0 | ENCARGADOS DE OBRAS/CAPATACES |
| 7938 | CONSTRUCCIÓN | La Pobla de Vallbona | COMUNIDAD VALENCIANA | 2018-10-22 | COMPLETA | VALENCIA | 0 | 0 | FONTANERÍA | |
| 8308 | CONSTRUCCIÓN | Torrent | COMUNIDAD VALENCIANA | 2018-10-22 | COMPLETA | VALENCIA | 0 | 0 | ALBAÑILERIA/ACABADOS | |
| 8348 | CONSTRUCCIÓN | Torrent | COMUNIDAD VALENCIANA | 2018-10-22 | COMPLETA | VALENCIA | 0 | 0 | ALBAÑILERIA/ACABADOS | |
| 8920 | FÁBRICAS/INDUSTRIA | Beniparrell | COMUNIDAD VALENCIANA | 2018-10-19 | INDIFERENTE | VALENCIA | 0 | 0 | MADERA Y MUEBLE/EBANISTERÍA | |
| 9295 | AGRICULTURA/JARDINERÍA/ALIMENTACIÓN | Valencia | COMUNIDAD VALENCIANA | 2018-10-19 | COMPLETA | VALENCIA | 2000 | 0 | PANADERÍA/REPOSTERÍA | |
| 9862 | CONSTRUCCIÓN | Albacete | CASTILLA LA MANCHA | 2018-10-18 | COMPLETA | ALBACETE | 0 | 0 | ENCOFRADO/FERRALLA/ESTRUCTURAS | |
| 10258 | PELUQUERÍA/ESTÉTICA | Sagunto/Sagunt | COMUNIDAD VALENCIANA | FP I, Ciclo de Grado Medio | 2018-10-17 | PARCIAL | VALENCIA | 0 | 0 | ESTÉTICA |
| 10508 | PELUQUERÍA/ESTÉTICA | Valladolid | CASTILLA Y LEÓN | FP I, Ciclo de Grado Medio | 2018-10-17 | COMPLETA | VALLADOLID | 1500 | 0 | ESTÉTICA |
| 11225 | INFORMÁTICA/TELECOMUNICACIONES | Bétera | COMUNIDAD VALENCIANA | FP II, Ciclo de Grado Superior | 2018-09-25 | INDIFERENTE | VALENCIA | 1000 | 0 | ANALISTAS/PROGRAMADORES |
| 11444 | ALMACENES/REPONEDORES | Torrelavega | CANTABRIA | Estudios primarios | 2018-10-16 | COMPLETA | CANTABRIA | 0 | 0 | MOZOS DE ALMACÉN/CARRETILLEROS |
| 11561 | COMUNICACIÓN/CULTURA/ENTRETENIMIENTO | Torrelavega | CANTABRIA | Bachillerato | 2018-10-16 | PARCIAL | CANTABRIA | 0 | 0 | ARTE/CULTURA/ESPECTÁCULOS |
| 11905 | ELECTRICIDAD/ELECTRÓNICA/ENERGÍA | Torrejón de Ardoz | MADRID | FP II, Ciclo de Grado Superior | 2018-10-16 | COMPLETA | MADRID | 0 | 0 | ELECTRÓNICA |
| 12521 | APRENDICES/PRIMER EMPLEO | Madrid | MADRID | Estudios primarios | 2018-06-28 | COMPLETA | MADRID | 0 | 0 | APRENDICES |
| 12549 | AGRICULTURA/JARDINERÍA/ALIMENTACIÓN | ESO, EGB, Graduado Escolar | 2018-10-14 | COMPLETA | 0 | 0 | AGRICULTURA/GANADERÍA | |||
| 13047 | ADMINISTRACIÓN | Madrid | MADRID | Diplomado o Ingeniero Técnico | 2017-02-27 | COMPLETA | MADRID | 0 | 0 | RECURSOS HUMANOS/PERSONAL |
| 13493 | ADMINISTRACIÓN | Barcelona | CATALUÑA | 2018-10-04 | COMPLETA | BARCELONA | 1305 | 0 | ADMINISTRATIVOS | |
| 13784 | EDUCACIÓN/SERVICIOS SOCIALES | Diplomado o Ingeniero Técnico | 2018-10-04 | PARCIAL | 0 | 0 | FORMACIÓN PROFESIONAL | |||
| 13818 | FÁBRICAS/INDUSTRIA | Laviana | PRINCIPADO DE ASTURIAS | 2018-10-04 | COMPLETA | ASTURIAS | 0 | 0 | PEONES/OPERARIOS/MANIPULADORES | |
| 13914 | ALMACENES/REPONEDORES | Picassent | COMUNIDAD VALENCIANA | ESO, EGB, Graduado Escolar | 2018-10-04 | INDIFERENTE | VALENCIA | 1200 | 0 | GESTIÓN DE ALMACENES |
| 13946 | CUIDADOS/ASISTENCIA EN EL HOGAR | Tres Cantos | MADRID | Sin estudios | 2018-10-04 | PARCIAL | MADRID | 950 | 0 | LIMPIEZA |
| 14386 | ELECTRICIDAD/ELECTRÓNICA/ENERGÍA | Reus | CATALUÑA | FP I, Ciclo de Grado Medio | 2018-06-21 | COMPLETA | TARRAGONA | 1100 | 0 | ELECTRICIDAD |
| 14662 | DEPENDIENTES/INFORMACIÓN | Bétera | COMUNIDAD VALENCIANA | Bachillerato | 2018-09-27 | PARCIAL | VALENCIA | 600 | 0 | TELEOPERADORES |
| 15534 | AGRICULTURA/JARDINERÍA/ALIMENTACIÓN | Cuéllar | CASTILLA Y LEÓN | Sin estudios | 2018-09-28 | COMPLETA | SEGOVIA | 900 | 0 | FORESTAL/JARDINERÍA |
| 15578 | COMERCIAL/VENTAS | Pego | COMUNIDAD VALENCIANA | FP I, Ciclo de Grado Medio | 2018-09-28 | COMPLETA | ALICANTE | 0 | 0 | VENDEDORES |
| 15686 | ADMINISTRACIÓN | Leganés | MADRID | FP I, Ciclo de Grado Medio | 2017-10-02 | COMPLETA | MADRID | 0 | 0 | CONTABILIDAD/FINANZAS |
| 15706 | ADMINISTRACIÓN | Pamplona/Iruña | NAVARRA | Licenciado o Ingeniero Superior | 2018-09-27 | COMPLETA | NAVARRA | 0 | 0 | ADMINISTRATIVOS |
| 15760 | METAL/MECÁNICA | Paracuellos de Jarama | MADRID | 2018-09-27 | COMPLETA | MADRID | 0 | 0 | CERRAJEROS/FORJA/HERREROS | |
| 15822 | ADMINISTRACIÓN | Madrid | MADRID | Bachillerato | 2018-09-27 | PARCIAL | MADRID | 0 | 0 | ADMINISTRATIVOS |
| 16704 | ADMINISTRACIÓN | Leganés | MADRID | Bachillerato | 2018-05-21 | COMPLETA | MADRID | 0 | 0 | ADMINISTRATIVOS |
| 16906 | COMERCIAL/VENTAS | Santander | CANTABRIA | ESO, EGB, Graduado Escolar | 2018-09-20 | COMPLETA | CANTABRIA | 1000 | 0 | VENDEDORES |
| 17298 | CONDUCTORES/TRANSPORTE | ESO, EGB, Graduado Escolar | 2018-09-19 | COMPLETA | 0 | 0 | REPARTO DE MERCANCÍAS | |||
| 17531 | CONDUCTORES/TRANSPORTE | Valdeltormo | ARAGÓN | 2018-09-18 | COMPLETA | TERUEL | 0 | 0 | REPARTO DE MERCANCÍAS | |
| 17853 | COMERCIAL/VENTAS | Madrid | MADRID | 2018-09-11 | INDIFERENTE | MADRID | 9999999 | 0 | AGENTES COMERCIALES/REPRESENTANTES | |
| 17854 | CONSTRUCCIÓN | Las Palmas de Gran Canaria | ISLAS CANARIAS | 2018-09-17 | COMPLETA | PALMAS (LAS) | 0 | 0 | CARPINTERÍA | |
| 17880 | COMERCIAL/VENTAS | Madrid | MADRID | Bachillerato | 2018-09-17 | INDIFERENTE | MADRID | 200000 | 0 | AGENTES COMERCIALES/REPRESENTANTES |
| 18130 | CONSTRUCCIÓN | Trigueros | ANDALUCÍA | ESO, EGB, Graduado Escolar | 2018-09-14 | COMPLETA | HUELVA | 0 | 0 | TECNICOS EN CONSTRUCCION |
| 18389 | INFORMÁTICA/TELECOMUNICACIONES | Leganés | MADRID | Otras Formaciones | 2018-09-13 | COMPLETA | MADRID | 0 | 0 | TELECOMUNICACIONES |
| 18682 | INGENIERÍA/CALIDAD/CIENCIAS | Telde | ISLAS CANARIAS | Diplomado o Ingeniero Técnico | 2018-09-12 | COMPLETA | PALMAS (LAS) | 0 | 0 | OTRAS ACTIVIDADES TÉCNICAS |
| 18684 | CONDUCTORES/TRANSPORTE | Estepona | ANDALUCÍA | Estudios primarios | 2018-09-12 | INDIFERENTE | MÁLAGA | 0 | 0 | TRANSPORTE DE PERSONAS O MERCANCIAS |
| 18691 | COMERCIAL/VENTAS | Sevilla | ANDALUCÍA | 2018-09-11 | INDIFERENTE | SEVILLA | 9999999 | 0 | AGENTES COMERCIALES/REPRESENTANTES | |
| 19036 | ELECTRICIDAD/ELECTRÓNICA/ENERGÍA | Las Navas de la Concepción | ANDALUCÍA | 2018-09-10 | COMPLETA | SEVILLA | 3000 | 0 | ELECTRICIDAD | |
| 19465 | CONSTRUCCIÓN | Porto do Son | GALICIA | 2018-09-06 | COMPLETA | CORUÑA (A) | 0 | 0 | GRÚAS/EXCAVADORAS/MAQUINARIA | |
| 19472 | CONDUCTORES/TRANSPORTE | Boiro | GALICIA | 2018-09-06 | COMPLETA | CORUÑA (A) | 0 | 0 | TRANSPORTE DE PERSONAS O MERCANCIAS | |
| 19491 | CONSTRUCCIÓN | Linares | ANDALUCÍA | 2018-09-06 | COMPLETA | JAÉN | 1250 | 0 | PEONES | |
| 19644 | PELUQUERÍA/ESTÉTICA | Olías del Rey | CASTILLA LA MANCHA | 2018-09-05 | PARCIAL | TOLEDO | 0 | 0 | PELUQUERÍA | |
| 19649 | PELUQUERÍA/ESTÉTICA | Olías del Rey | CASTILLA LA MANCHA | 2018-09-05 | PARCIAL | TOLEDO | 0 | 0 | ESTÉTICA | |
| 19659 | AGRICULTURA/JARDINERÍA/ALIMENTACIÓN | Silleda | GALICIA | 2018-09-05 | PARCIAL | PONTEVEDRA | 0 | 0 | CARNICERÍA/CHARCUTERIA | |
| 19797 | FÁBRICAS/INDUSTRIA | San Sebastián de los Reyes | MADRID | 2018-09-04 | COMPLETA | MADRID | 0 | 0 | ARTESANÍA/OFICIOS | |
| 19806 | VIGILANCIA/SERVICIOS | Gozón | PRINCIPADO DE ASTURIAS | Certificados de Profesionalidad | 2018-09-04 | INDIFERENTE | ASTURIAS | 0 | 0 | AUXILIARES DE SERVICIO/PERSONAL SUBALTER |
| 20058 | CONSTRUCCIÓN | Silleda | GALICIA | Estudios primarios | 2018-09-03 | COMPLETA | PONTEVEDRA | 1000 | 0 | PEONES |
| 20077 | CONSTRUCCIÓN | Silleda | GALICIA | ESO, EGB, Graduado Escolar | 2018-09-03 | COMPLETA | PONTEVEDRA | 1000 | 0 | ALBAÑILERIA/ACABADOS |
| 20401 | PELUQUERÍA/ESTÉTICA | Avilés | PRINCIPADO DE ASTURIAS | Certificados de Profesionalidad | 2018-05-09 | PARCIAL | ASTURIAS | 4 | 0 | ESTÉTICA |
| 20418 | COMUNICACIÓN/CULTURA/ENTRETENIMIENTO | Petrer | COMUNIDAD VALENCIANA | 2018-08-30 | COMPLETA | ALICANTE | 15000 | 0 | APUESTAS Y JUEGO | |
| 20420 | CUIDADOS/ASISTENCIA EN EL HOGAR | Sevilla | ANDALUCÍA | 2018-08-30 | INDIFERENTE | SEVILLA | 850 | 0 | LIMPIEZA | |
| 20582 | PELUQUERÍA/ESTÉTICA | Salamanca | CASTILLA Y LEÓN | Licenciado o Ingeniero Superior | 2018-08-29 | PARCIAL | SALAMANCA | 1200 | 0 | ESTÉTICA |
| 21013 | ELECTRICIDAD/ELECTRÓNICA/ENERGÍA | Ourense | GALICIA | FP I, Ciclo de Grado Medio | 2018-08-28 | COMPLETA | OURENSE | 0 | 0 | ELECTRICIDAD |
| 21210 | COMUNICACIÓN/CULTURA/ENTRETENIMIENTO | Madrid | MADRID | 2018-08-27 | COMPLETA | MADRID | 0 | 0 | COMUNICACIÓN/PUBLICIDAD/MARKETING | |
| 21974 | CONSTRUCCIÓN | Porto do Son | GALICIA | 2018-09-06 | COMPLETA | CORUÑA (A) | 0 | 0 | GRÚAS/EXCAVADORAS/MAQUINARIA | |
| 22139 | CONSTRUCCIÓN | Porto do Son | GALICIA | 2018-09-06 | COMPLETA | CORUÑA (A) | 0 | 0 | GRÚAS/EXCAVADORAS/MAQUINARIA | |
| 22146 | CONDUCTORES/TRANSPORTE | Boiro | GALICIA | 2018-09-06 | COMPLETA | CORUÑA (A) | 0 | 0 | TRANSPORTE DE PERSONAS O MERCANCIAS | |
| 22164 | CONSTRUCCIÓN | Linares | ANDALUCÍA | 2018-09-06 | COMPLETA | JAÉN | 1250 | 0 | PEONES | |
| 22341 | PELUQUERÍA/ESTÉTICA | Olías del Rey | CASTILLA LA MANCHA | 2018-09-05 | PARCIAL | TOLEDO | 0 | 0 | PELUQUERÍA | |
| 22346 | PELUQUERÍA/ESTÉTICA | Olías del Rey | CASTILLA LA MANCHA | 2018-09-05 | PARCIAL | TOLEDO | 0 | 0 | ESTÉTICA | |
| 22356 | AGRICULTURA/JARDINERÍA/ALIMENTACIÓN | Silleda | GALICIA | 2018-09-05 | PARCIAL | PONTEVEDRA | 0 | 0 | CARNICERÍA/CHARCUTERIA | |
| 22521 | FÁBRICAS/INDUSTRIA | San Sebastián de los Reyes | MADRID | 2018-09-04 | COMPLETA | MADRID | 0 | 0 | ARTESANÍA/OFICIOS | |
| 22530 | VIGILANCIA/SERVICIOS | Gozón | PRINCIPADO DE ASTURIAS | Certificados de Profesionalidad | 2018-09-04 | INDIFERENTE | ASTURIAS | 0 | 0 | AUXILIARES DE SERVICIO/PERSONAL SUBALTER |
| 22819 | CONSTRUCCIÓN | Silleda | GALICIA | Estudios primarios | 2018-09-03 | COMPLETA | PONTEVEDRA | 1000 | 0 | PEONES |
| 22838 | CONSTRUCCIÓN | Silleda | GALICIA | ESO, EGB, Graduado Escolar | 2018-09-03 | COMPLETA | PONTEVEDRA | 1000 | 0 | ALBAÑILERIA/ACABADOS |
| 23440 | PELUQUERÍA/ESTÉTICA | Avilés | PRINCIPADO DE ASTURIAS | Certificados de Profesionalidad | 2018-05-09 | PARCIAL | ASTURIAS | 4 | 0 | ESTÉTICA |
| 23457 | COMUNICACIÓN/CULTURA/ENTRETENIMIENTO | Petrer | COMUNIDAD VALENCIANA | 2018-08-30 | COMPLETA | ALICANTE | 15000 | 0 | APUESTAS Y JUEGO | |
| 23459 | CUIDADOS/ASISTENCIA EN EL HOGAR | Sevilla | ANDALUCÍA | 2018-08-30 | INDIFERENTE | SEVILLA | 850 | 0 | LIMPIEZA | |
| 23637 | PELUQUERÍA/ESTÉTICA | Salamanca | CASTILLA Y LEÓN | Licenciado o Ingeniero Superior | 2018-08-29 | PARCIAL | SALAMANCA | 1200 | 0 | ESTÉTICA |
| 24088 | ELECTRICIDAD/ELECTRÓNICA/ENERGÍA | Ourense | GALICIA | FP I, Ciclo de Grado Medio | 2018-08-28 | COMPLETA | OURENSE | 0 | 0 | ELECTRICIDAD |
| 24296 | COMUNICACIÓN/CULTURA/ENTRETENIMIENTO | Madrid | MADRID | 2018-08-27 | COMPLETA | MADRID | 0 | 0 | COMUNICACIÓN/PUBLICIDAD/MARKETING | |
| 25399 | COMERCIAL/VENTAS | Santander | CANTABRIA | 2018-08-17 | PARCIAL | CANTABRIA | 0 | 0 | VENDEDORES | |
| 25517 | EDUCACIÓN/SERVICIOS SOCIALES | El Astillero | CANTABRIA | Diplomado o Ingeniero Técnico | 2018-08-16 | PARCIAL | CANTABRIA | 0 | 0 | ENSEÑANZA DE IDIOMAS |
| 26002 | ADMINISTRACIÓN | Barcelona | CATALUÑA | 2018-08-08 | COMPLETA | BARCELONA | 15000 | 0 | ADMINISTRATIVOS | |
| 26003 | ADMINISTRACIÓN | Barcelona | CATALUÑA | 2018-08-08 | COMPLETA | BARCELONA | 15000 | 0 | ADMINISTRATIVOS | |
| 26626 | SALUD/DEPORTE | El Pedernoso | CASTILLA LA MANCHA | Diplomado o Ingeniero Técnico | 2018-08-03 | PARCIAL | CUENCA | 0 | 0 | ENFERMERÍA |
| 26702 | ELECTRICIDAD/ELECTRÓNICA/ENERGÍA | Valladolid | CASTILLA Y LEÓN | FP I, Ciclo de Grado Medio | 2018-08-02 | COMPLETA | VALLADOLID | 20000 | 0 | ELECTRICIDAD |
| 26785 | VIGILANCIA/SERVICIOS | Madrid | MADRID | 2018-07-30 | COMPLETA | MADRID | 1200 | 0 | AUXILIARES DE SERVICIO/PERSONAL SUBALTER | |
| 26786 | FÁBRICAS/INDUSTRIA | Argentona | CATALUÑA | 2018-06-18 | COMPLETA | BARCELONA | 0 | 0 | TEXTIL/CONFECCIÓN/CALZADO | |
| 30052 | COMERCIAL/VENTAS | Valencia | COMUNIDAD VALENCIANA | ESO, EGB, Graduado Escolar | 2018-07-04 | INDIFERENTE | VALENCIA | 2000 | 0 | AGENTES COMERCIALES/REPRESENTANTES |
| 30299 | FÁBRICAS/INDUSTRIA | Madrid | MADRID | Certificados de Profesionalidad | 2017-06-06 | INDIFERENTE | MADRID | 0 | 0 | FUNDICIÓN/SIDERURGÍA |
| 30301 | FÁBRICAS/INDUSTRIA | Madrid | MADRID | Certificados de Profesionalidad | 2017-06-06 | INDIFERENTE | MADRID | 0 | 0 | FUNDICIÓN/SIDERURGÍA |
| 32763 | CONSTRUCCIÓN | Madrid | MADRID | Licenciado o Ingeniero Superior | 2018-06-04 | INDIFERENTE | MADRID | 0 | 0 | TECNICOS EN CONSTRUCCION |
offers_sp <- subset(offers_sp, !(SalarioMax==9999999))
offers_sp$SalarioMin <- as.numeric(offers_sp$SalarioMin)
offers_sp$SalarioMax <- as.numeric(offers_sp$SalarioMax)
boxplot(offers_sp$SalarioMax ~ offers_sp$Comunidad)
Veiem que els valors extrems que tenim ara son més raonables, i considero que els podriem deixar tal qual.
Per al nostre estudi ens interesen les dades totals dels salaris máxims i mínims, però també estudiarem les característiques d’aquests salaris ofertats en les 4 communitats autónomes amb més ofertes.
summary(offers_sp)
Categoria Ciudad Comunidad
INFORMÁTICA/TELECOMUNICACIONES: 978 Barcelona: 862 CATALUÑA :2788
COMERCIAL/VENTAS : 761 : 803 MADRID :1320
ADMINISTRACIÓN : 593 Madrid : 786 ANDALUCÍA : 831
CONSTRUCCIÓN : 455 Girona : 158 COMUNIDAD VALENCIANA: 370
HOSTELERÍA/TURISMO : 438 Valencia : 79 CASTILLA Y LEÓN : 230
FÁBRICAS/INDUSTRIA : 381 Sevilla : 75 GALICIA : 230
(Other) :3221 (Other) :4064 (Other) :1058
Educacion FechaCreacion TipoJornada Provincia
:3146 Min. :2016-04-08 :1054 BARCELONA:2051
FP II, Ciclo de Grado Superior :1214 1st Qu.:2018-07-11 COMPLETA :4531 MADRID :1305
ESO, EGB, Graduado Escolar : 508 Median :2018-09-06 INDIFERENTE: 174 GIRONA : 347
FP I, Ciclo de Grado Medio : 473 Mean :2018-07-20 PARCIAL :1068 TARRAGONA: 242
Diplomado o Ingeniero Técnico : 424 3rd Qu.:2018-10-13 VALENCIA : 222
Licenciado o Ingeniero Superior: 263 Max. :2018-11-04 SEVILLA : 197
(Other) : 799 (Other) :2463
SalarioMax SalarioMin SubCategoria
Min. : 0 Min. : 0 AGENTES COMERCIALES/REPRESENTANTES: 579
1st Qu.: 1200 1st Qu.: 900 : 389
Median : 1600 Median : 1300 ANALISTAS/PROGRAMADORES : 295
Mean : 9911 Mean : 7432 ADMINISTRATIVOS : 288
3rd Qu.: 18500 3rd Qu.:15000 PEONES/OPERARIOS/MANIPULADORES : 212
Max. :340000 Max. :50000 ELECTRICIDAD : 200
(Other) :4864
Podem veure que aquestes son: Catalunya, Madrid, Andalucía i Comunitat Valenciana.
Creem doncs els grups.
offers_cat <- subset(offers_sp, Comunidad=="CATALUÑA")
offers_mad <- subset(offers_sp, Comunidad=="MADRID")
offers_and <- subset(offers_sp, Comunidad=="ANDALUCÍA")
offers_val <- subset(offers_sp, Comunidad=="COMUNIDAD VALENCIANA")
Començem mirant si les variables pertanyen a una distribució normal.
qqnorm(offers_sp$SalarioMax)
qqline(offers_sp$SalarioMax)
qqnorm(offers_sp$SalarioMin)
qqline(offers_sp$SalarioMin)
Veiem que tant els salaris mínims com màxims no s’ajusten gaire bé a la normalitat. Mirarem ara com es comporten els grups creats anteriorment.
layout(matrix(c(1,2,3,4),2,2))
for(data in list(offers_cat,offers_mad,offers_and,offers_val)){
qqnorm(data$SalarioMax)
qqline(data$SalarioMax)
}
qqnorm(subset(offers_sp, Categoria == "INFORMÁTICA/TELECOMUNICACIONES")$SalarioMin)
qqline(subset(offers_sp, Categoria == "INFORMÁTICA/TELECOMUNICACIONES")$SalarioMin)
shapiro.test(subset(offers_sp, Categoria == "INFORMÁTICA/TELECOMUNICACIONES")$SalarioMin)
Shapiro-Wilk normality test
data: subset(offers_sp, Categoria == "INFORMÁTICA/TELECOMUNICACIONES")$SalarioMin
W = 0.91753, p-value < 2.2e-16
Veiem que tampoc s’ajusten gairebé a la normalitat.
Podriem també realitzar els càlculs mitjançant un test de Shapiro-Wilk.
for(data in list(offers_cat,offers_mad,offers_and,offers_val)){
p_val <- shapiro.test(data$SalarioMax)
print(p_val)
}
Shapiro-Wilk normality test
data: data$SalarioMax
W = 0.69585, p-value < 2.2e-16
Shapiro-Wilk normality test
data: data$SalarioMax
W = 0.66218, p-value < 2.2e-16
Shapiro-Wilk normality test
data: data$SalarioMax
W = 0.52212, p-value < 2.2e-16
Shapiro-Wilk normality test
data: data$SalarioMax
W = 0.81917, p-value < 2.2e-16
for(data in list(offers_cat,offers_mad,offers_and,offers_val)){
p_val <- shapiro.test(data$SalarioMin)
print(p_val)
}
Shapiro-Wilk normality test
data: data$SalarioMin
W = 0.65838, p-value < 2.2e-16
Shapiro-Wilk normality test
data: data$SalarioMin
W = 0.89981, p-value < 2.2e-16
Shapiro-Wilk normality test
data: data$SalarioMin
W = 0.52533, p-value < 2.2e-16
Shapiro-Wilk normality test
data: data$SalarioMin
W = 0.82152, p-value < 2.2e-16
En tots els casos veiem que el valor de p_value no supera el 0.05, amb la qual cosa no passen el test de normalitat, es a dir, no segueixen una distribució normal.
Seguidament podriem mirar la homogeneïtat de la variància. Per a tal efecte, podriem aplicar un test de Fligner-Killeen.
fligner.test(SalarioMin ~ SalarioMax, data=offers_sp )
Fligner-Killeen test of homogeneity of variances
data: SalarioMin by SalarioMax
Fligner-Killeen:med chi-squared = 2231.1, df = 289, p-value < 2.2e-16
Com que el valor de p_value es menor que 0.05, no podem acceptar la hipòtesi nul·la de que les variàncies son homogenies.
TODO: To be removed, looking for variances.
fligner.test(SalarioMin ~ SalarioMax, data=subset(offers_sp, Categoria == "INFORMÁTICA/TELECOMUNICACIONES") )
Fligner-Killeen test of homogeneity of variances
data: SalarioMin by SalarioMax
Fligner-Killeen:med chi-squared = 206.85, df = 67, p-value = 3.483e-16
Lógicament, la correlació del salari mínim i màxim ha de ser positiva, en la que a major salari mínim tenim també un major salari màxim. De totes maneres, per ilustrar aquesta relació, podem calcular el valor de correlació d’aquestes dues variables.
cor_matrix <- cor(offers_sp$SalarioMin, offers_sp$SalarioMax)
round(cor_matrix, 2)
[1] 0.86
Veiem que aquest valor s’aproxima molt a 1, donant-nos així el resultat esperat.
Podriem passar ara a crear un model de regressió lineal en funció de la comunitat a on sorgeix la oferta.
# Creem el nostre model lineal
model_1 <- lm(SalarioMax ~ SalarioMin, data=offers_sp)
summary(model_1)$r.squared
[1] 0.7373753
# Creem el nostre model lineal
model_cat <- lm(SalarioMax ~ SalarioMin + Categoria, data=offers_cat)
summary(model_cat)$r.squared
[1] 0.8458042
data_pred_1 <- data.frame(Comunidad="CATALUÑA", SalarioMin=20000)
predict(model_1, data_pred_1)
1
24981.38
data_pred_cat <- data.frame(Comunidad="CATALUÑA", SalarioMin=20000, Categoria="INFORMÁTICA/TELECOMUNICACIONES")
predict(model_cat, data_pred_cat)
1
25114.95
Veiem que amb aquests models podem fer prediccions sobre quant podria arribar a ser el salari màxim en funció del mínim, la comunitat i la categoria de la oferta.
Seguidament podriem fer un contrast entre regions per tal de donar resposta a la pregunta: a Catalunya es generen ofertes de treball amb un salari mínim superior a la resta d’Espanya?
Per a tal motiu utilitzarem necessitarem preparar el conjunt de dades de mostres de comunitats diferents a Catalunya.
offers_no_cat <- subset(offers_sp, !(Comunidad=="CATALUÑA"))
Per aquest estudi utilitzarem la següent hipòtesi nul·la i alternativa:
\[H0: \mu_1-\mu_2 = 0\]
\[H1: \mu_1-\mu_2 > 0\]
Farem servir un contrast sobre la diferència de mitjanes. Com que les nostres dues mostres tenen més de 30 observacions, gràcies al teorema del límit central podrem considerar-les com distribucions normals.
TODO: Problema, no tenim homogeneitat a la variancia …
t.test(offers_cat$SalarioMin, offers_no_cat$SalarioMin, alternative = "greater")
Welch Two Sample t-test
data: offers_cat$SalarioMin and offers_no_cat$SalarioMin
t = -12.441, df = 6310.4, p-value = 1
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
-3087.379 Inf
sample estimates:
mean of x mean of y
5896.205 8623.017
Com que el p-value es major que 0.05, no podem rebutjar la hipòtesi nul·la, lo que vol dir que no podem afirmar que el salari mínim les ofertes de treball a Catalunya sigui més alt que a la resta d’Espanya.